﻿// DropLesson.cpp : 实现文件
//

#include "stdafx.h"
#include "学生管理系统MFC.h"
#include "DropLesson.h"
#include "afxdialogex.h"


// CDropLesson 对话框

IMPLEMENT_DYNAMIC(CDropLesson, CDialogEx)

CDropLesson::CDropLesson(CWnd* pParent /*=NULL*/)
	: CDialogEx(IDD_DROPLESSON, pParent)
{

}

CDropLesson::~CDropLesson()
{
}

void CDropLesson::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_LIST1, m_list);
}


BEGIN_MESSAGE_MAP(CDropLesson, CDialogEx)
	ON_WM_SHOWWINDOW()
	ON_NOTIFY(NM_DBLCLK, IDC_LIST1, &CDropLesson::OnNMDblclkList1)
END_MESSAGE_MAP()


// CDropLesson 消息处理程序

void CDropLesson::Query()
{
	CString sql;
	//m_username = _T("2014301500095");
	sql = _T("SELECT DISTINCT [课程].[课头号],[课程].[课程名],[课程].[课程类型],课程.年级,课程.学期,[课程].[学习类型],[课程].[授课学院],[课程].[教材],[教师].[姓名],教师.职称,[课程].[专业],[课程].[学分],[课程].[学时],[课程].[上课时间],[课程].[上课校区],[课程].[上课地点],[课程].[备注] FROM [成绩], [学生], [课程],教师 WHERE 教师.工号=课程.教师 AND [学生].[学号] = ") + m_username + _T(" AND [学生].[学号] = [成绩].[学号] AND [课程].[课头号] = [成绩].[课头号] AND [成绩].[年级] = ") + m_year + _T(" AND [成绩].[学期] = '") + m_term + _T("'");
	::CoInitialize(NULL);
	g_pDB->Initialize(ConnectionAddress, ConnectionDB, ConnectionUser, ConnectionPassword);
	CSqlStatement *stmt = g_pDB->ExecuteSQL(sql);
	while (stmt != NULL)
	{
		if (stmt->NextRow() == NULL)
		{
			break;
		}
		int nRow = m_list.InsertItem(0, stmt->ValueString(_T("课头号")));//插入行
		m_list.SetItemText(nRow, 1, stmt->ValueString(_T("课程名")));//设置数据
		m_list.SetItemText(nRow, 2, stmt->ValueString(_T("课程类型")));//设置数据
		m_list.SetItemText(nRow, 3, stmt->ValueString(_T("学分")));//设置数据
		m_list.SetItemText(nRow, 4, stmt->ValueString(_T("姓名")));//设置数据
		m_list.SetItemText(nRow, 5, stmt->ValueString(_T("职称")));//设置数据
		m_list.SetItemText(nRow, 6, stmt->ValueString(_T("授课学院")));//设置数据
		m_list.SetItemText(nRow, 7, stmt->ValueString(_T("学习类型")));//设置数据
		m_list.SetItemText(nRow, 8, stmt->ValueString(_T("教材")));//设置数据
		m_list.SetItemText(nRow, 9, stmt->ValueString(_T("年级")));//设置数据
		m_list.SetItemText(nRow, 10, stmt->ValueString(_T("学期")));//设置数据
		CString 上课时间地点 = stmt->ValueString(_T("上课时间")) + _T(",") + stmt->ValueString(_T("上课校区")) + _T(",") + stmt->ValueString(_T("上课地点"));
		m_list.SetItemText(nRow, 11, 上课时间地点);//设置数据
	}
	delete stmt;
	::CoUninitialize();
}

BOOL CDropLesson::OnInitDialog()
{
	CDialogEx::OnInitDialog();
	CRect rect;
	// 获取编程语言列表视图控件的位置和大小   
	m_list.GetClientRect(&rect);
	// 为列表视图控件添加全行选中和栅格风格   
	m_list.SetExtendedStyle(m_list.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
	m_list.InsertColumn(0, _T("课头号"), LVCFMT_CENTER, rect.Width() / 3, 0);
	m_list.InsertColumn(1, _T("课程名"), LVCFMT_CENTER, rect.Width() / 3, 0);
	m_list.InsertColumn(2, _T("性质"), LVCFMT_CENTER, rect.Width() / 3, 0);
	m_list.InsertColumn(3, _T("学分"), LVCFMT_CENTER, rect.Width() / 3, 0);
	m_list.InsertColumn(4, _T("教师"), LVCFMT_CENTER, rect.Width() / 3, 0);
	m_list.InsertColumn(5, _T("职称"), LVCFMT_CENTER, rect.Width() / 3, 0);
	m_list.InsertColumn(6, _T("授课学院"), LVCFMT_CENTER, rect.Width() / 3, 0);
	m_list.InsertColumn(7, _T("学习类型"), LVCFMT_CENTER, rect.Width() / 3, 0);
	m_list.InsertColumn(8, _T("教材"), LVCFMT_CENTER, rect.Width() / 3, 0);
	m_list.InsertColumn(9, _T("学年"), LVCFMT_CENTER, rect.Width() / 3, 0);
	m_list.InsertColumn(10, _T("学期"), LVCFMT_CENTER, rect.Width() / 3, 0);
	m_list.InsertColumn(11, _T("上课时间地点详细"), LVCFMT_CENTER, rect.Width() / 3, 0);
	// TODO:  在此添加额外的初始化

	return TRUE;  // return TRUE unless you set the focus to a control
				  // 异常: OCX 属性页应返回 FALSE
}


void CDropLesson::OnShowWindow(BOOL bShow, UINT nStatus)
{
	CDialogEx::OnShowWindow(bShow, nStatus);
	if (bShow == true)
	{
		m_list.DeleteAllItems();
		Query();
	}
	
	// TODO: 在此处添加消息处理程序代码
}


void CDropLesson::OnNMDblclkList1(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
	// TODO: 在此添加控件通知处理程序代码
	Drop();
	*pResult = 0;
}

void CDropLesson::OnOK()
{
	Drop();
}
void CDropLesson::Drop()
{
	//获取选中的的一个位置
	POSITION p = m_list.GetFirstSelectedItemPosition();
	if (p == NULL)
	{
		TRACE("没有行被选中!");
		return;
	}
	::CoInitialize(NULL);
	g_pDB->Initialize(ConnectionAddress, ConnectionDB, ConnectionUser, ConnectionPassword);
	//获取刚选取的位置的下标(从0开始的) 
	int index = m_list.GetNextSelectedItem(p);

	//获得选中的内容
	//得到第index行.第0列的内容(下标从0开始)
	CString 课头号 = m_list.GetItemText(index, 0);
	CString sql = _T("DELETE FROM 成绩 WHERE 课头号=") + 课头号 + _T(" AND 学号 =") + m_username;
	g_pDB->UpdateSQL(sql);
	sql = _T("UPDATE [教务系统].[dbo].[课程] SET [剩余人数]=剩余人数+1 WHERE ([课头号]=" + 课头号 + _T(")"));
	g_pDB->UpdateSQL(sql);
	::CoUninitialize();
	m_list.DeleteAllItems();
	Query();
	MessageBox(_T("撤课成功！"));
}